// 公共方法 'const $app = getApp()'  '$app.$common'
let Loading = {
  el: false,
  text: '加载中'
}

export default{
  // ==================== 开启加载 ====================
  // $common.openLoading()
  openLoading (text = '加载中') {
    Loading = { el: true, text }
    wx.showLoading({
      title: text,
      mask: true // 阻止屏幕滑动
    })
  },
  // ==================== 关闭加载 ====================
  // $common.closeLoading()
  closeLoading () {
    if (Loading.el) {
      Loading.el = false
      wx.hideLoading()
    } else {
      wx.showLoading({
        title: Loading.text,
        mask: true // 阻止屏幕滑动
      })
      wx.hideLoading()
    }
  },
  // ================ 自定义提示信息 ==================
  // $common.alert('消息内容', success)
  message (msg, type = 'none') {
    // success / error / warning / none / loading 加载
    // image 自定义图标(优先级高于icon)
    if (type === 'error' || type === 'warning') {
      type = 'none'
    }
    wx.showToast({
      title: msg,
      duration: 2000,
      mask: true,
      icon: type
    })
  },
  // ===================== 删除提交提醒 ======================
  confirm (type = 'del', confirm) {
    // del删除 submit提交
    // $app.$common.confirm('submit', () => {
    //   console.log('点击确定')
    // })
    const info = {
      del: { text: '此操作将永久删除该条数据，是否继续？' },
      over: { text: '此操作将结束该合同，是否继续？' },
      submit: { text: '是否提交数据？'}
    }
    wx.showModal({
      title: ' ', // 标题(可为空或者省略)
      content: info[type].text,
      confirmText: '确定',
      confirmColor: '#009966',
      cancelText: '取消',
      cancelColor: '#999',
      showCancel: true, // 设置cancel是否展示
      success: function (res) {
        if (res.confirm) { // 点击确定
          // console.log( '确定')
          confirm()
        } else if (res.cancel) { // 点击取消
          // console.log( '取消')
        }
      },
      fail: function (res) { }, //接口调用失败的回调函数
    })
  },
  // ==================== 数组找下标 ====================
  // arr[必填]: 数组 / val[必填]: 当前值 / valKey: 当前值键名
  arrFindIndex (arr, val, valKey) {
    if (!arr) arr = []
    return arr.findIndex(b => b === val || b + '' === val + '' || b[valKey] === val || b[valKey] + '' === val + '')
  },
  // ==================== 数组找元素 ====================
  // arr[必填]: 数组 / val[必填]: 当前值 / valKey: 当前值键名 / expectKey: 目标键名
  arrFindEl (arr, val, valKey, expectKey) {
    if (!arr) arr = []
    const el = arr.find(b => b === val || b + '' === val + '' || b[valKey] === val || b[valKey] + '' === val + '')
    return el ? (expectKey ? el[expectKey] : el) : null
  },
  // ==================== 日期格式 'YYYY-MM-DD hh:mm:ss:SS 星期W' ====================
  // H+: 也是时，但只显示(1-12) / Q+: 季度
  dateFormat (date, format) {
    const week = ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d']
    const str = {
      'M+': date.getMonth() + 1, // 月
      'D+': date.getDate(), // 日
      'W+': week[date.getDay()], // 星期/周
      'H+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 时
      'h+': date.getHours(), // 时
      'm+': date.getMinutes(), // 分
      's+': date.getSeconds(), // 秒
      'S+': date.getMilliseconds(), // 毫秒
      'Q+': Math.floor((date.getMonth() + 3) / 3) // 季度
    }
    let fmt = format
    if (/(Y+)/.test(fmt)) { // 年
      fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (const k in str) { // 循环替换匹配值
      if (new RegExp('(' + k + ')').test(fmt)) {
        fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str[k] : ('00' + str[k]).substr(('' + str[k]).length))
      }
    }
    return fmt
  },
  // ==================== 获取日期 (返回原日期格式) ====================
  getDate (type, num, time) {
    let date = time ? new Date(time) : new Date()
    let year = date.getFullYear()
    let month = date.getMonth() + 1
    // let day = date.getDate()
    if (type === 'Y') { // 设置某年
      date.setFullYear(num)
    } else if (type === 'M') { // 设置某月 0-11
      date.setMonth(num - 1)
    } else if (type === 'D') { // 设置某日 1-31
      date.setDate(num)
    } else if (type === 'beforeY') { // 年前
      date.setFullYear(year - num)
    } else if (type === 'afterY') { // 年后
      date.setFullYear(year + num)
    } else if (type === 'beforeM') { // 月前
      if (num < month) {
        date.setMonth(month - num - 1)
      } else {
        let numY = parseInt((num - month) / 12)
        let numM = 12 - (num - month) % 12
        date.setFullYear(year - numY - 1)
        date.setMonth(numM - 1)
      }
    } else if (type === 'afterM') { // 月后
      if (num <= 12 - month) {
        date.setMonth(month + num - 1)
      } else {
        let numY = parseInt((num - (12 - month)) / 12)
        let numM = (num - (12 - month)) % 12
        date.setFullYear(year + numY + 1)
        date.setMonth(numM - 1)
      }
    } else if (type === 'beforeD') { // 日前
      let numD = date.getTime() - 1000 * 60 * 60 * 24 * num
      date = new Date(numD)
    } else if (type === 'afterD') { // 日后
      let numD = date.getTime() + 1000 * 60 * 60 * 24 * num
      date = new Date(numD)
    }
    return date
  },
  // ====================== 下载文件 ======================
  // $common.download(url)
  download (url) {
    wx.downloadFile({
      url: url,
      success (res) {
        wx.openDocument({
          filePath: res.tempFilePath,
          success() {
            Toast('文件打开成功')
          }
        })
      }
    })
  },
  // ====================== 文件上传 ======================
  uploadFile (file, url, name) {
    // file/文件地址  url/上传服务器地址  name/后端接受字段
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: url, // 上传的服务器接口地址
        filePath: file, 
        header: {  
          "Content-Type": "multipart/form-data",
          'token':  ''   //若有token，此处换上你的token，没有的话省略
        },
        name: name, //上传的所需字段，后端提供
        success: (res) => {
          // 上传完成操作
          const data = JSON.parse(res.data)
          resolve({
            data: data
          })
        },
        fail: (err) => {
          //上传失败：修改pedding为reject
          reject(err)
        }
      });
    })
  },
  // ==================== val 不为空 ====================
  noNull (val) { return (val || val === 0 || val === false) },
  // ====================== 限制时间 ======================
  // 注: 开始时间小于结束时间，用于时间框，一般与@blur事件绑定
  // startStr: 开始时间字符串 / startTime: 开始时间 / endStr: 结束时间字符串 / endTime: 结束时间
  // that 指针
  // limitTime (startStr, startTime, endStr, endTime, that) {
  limitTime (startStr, startTime, endStr, endTime, that) {
    return new Promise((resolve) => {
      if (!startTime || !endTime) {
        resolve('sure')
        return
      }
      let start = new Date(startTime).getTime()
      let end = new Date(endTime).getTime()
      if (start > end) {
        startStr && this.message('开始时间不能大于结束时间', 'warning')
        endStr && this.message('结束时间不能小于开始时间', 'warning')
        that.setData({ [startStr || endStr]: null })
      } else {
        resolve('sure')
      }
    })
  },
  // =================== 资产编号排序 ==============
  assetsNumSort (val) {
    var arr = []
    var parobj = {}
    val.forEach(b => {
      const k = b.parentId || b.assetsNum
      if (parobj[k]) {
        b.parentId ? parobj[k].push(b) : parobj[k].unshift(b)
      } else {
        parobj[k] = [b]
      }
    })
    for (const k in parobj) {
      arr = arr.concat(parobj[k])
    }
    return arr
  }
}

  // // ====================== 小数运算 ======================
  // // math[必填]: 运算符(+ - * / %) / num1[必填]: 数字1 / num2: 数字2
  // decimalMath (num1, math, num2) {
  //   let pow = 1
  //   const arr = [num1 + '', num2 + '']
  //   arr.forEach(b => {
  //     const n = b.indexOf('.') ? b.length - b.indexOf('.') - 1 : 0
  //     pow = n > pow ? n : pow
  //   })
  //   const len = Math.pow(10, pow)
  //   num1 = Number(num1) * len
  //   num2 = Number(num2) * len
  //   let result = 0
  //   math = math.trim() // 删除字符串两端的空白字符
  //   if (math === '+') result = (num1 + num2) / len
  //   if (math === '-') result = (num1 - num2) / len
  //   if (math === '*') result = num1 * num2 / len / len
  //   if (math === '/') result = num1 / num2
  //   if (math === '%') result = num1 % num2 / len
  //   // console.log('小数运算', result)
  //   return result
  // },
  // // ==================== 获取1级菜单名 ====================
  // getMenuName ($route) {
  //   const str = $route.path.replace('/home/', '')
  //   const menuName = str.indexOf('/') !== -1 ? str.substring(0, str.indexOf('/')) : str.substring(0)
  //   return menuName
  // }